#include <iostream>

class Test
{
public:
    Test()
    {
        std::cout << "构造函数\n";
    }
    ~Test()
    {
        std::cout << "析构函数\n";
    }

    
};

void func()
{   
    //栈的解旋：在抛出异常之后，函数中的和try代码块上的栈上的对象会自动析构
    Test t;
    throw Test();
}


int main()
{
    try
    {   //Test T;
        func();
    }
    //抛出的对象会在捕获异常处理之后进行析构
    //支持向上转型
    catch(Test T)
    {
        std::cout<<"异常捕获\n";
    }
    return 0;
}